<?php
/**
 * 回调监控脚本
 * 用于后台读取curl回调结果并记录到主日志
 * 
 * 使用方法：
 * php app/monitor_callback.php 订单号 日志文件路径
 */

require __DIR__ . '/../vendor/autoload.php';

use think\facade\Log;

// 获取参数
$orderNumber = $argv[1] ?? '';
$logFile = $argv[2] ?? '';

if (empty($orderNumber) || empty($logFile)) {
    exit("参数错误\n");
}

// 等待1秒让curl完成
sleep(1);

// 最多等待10秒
$maxWait = 10;
$waited = 0;

while ($waited < $maxWait) {
    if (file_exists($logFile)) {
        // 读取日志内容
        $content = file_get_contents($logFile);
        
        if (!empty($content)) {
            // 初始化应用以使用Log
            $app = new think\App();
            $app->initialize();
            
            // 解析响应
            $success = false;
            
            // 查找HTTP状态码
            if (preg_match('/HTTP\/\d\.\d\s+(\d+)/', $content, $matches)) {
                $httpCode = (int)$matches[1];
                if ($httpCode >= 200 && $httpCode < 300) {
                    // 尝试解析JSON响应
                    if (preg_match('/\{.*\}/s', $content, $jsonMatches)) {
                        $data = json_decode($jsonMatches[0], true);
                        if ($data && isset($data['code']) && $data['code'] == 200) {
                            $success = true;
                        }
                    } else {
                        $success = true; // HTTP 200也算成功
                    }
                }
            }
            
            // 记录到主日志
            if ($success) {
                Log::info('异步回调通知成功', [
                    'order_number' => $orderNumber,
                    'log_file' => basename($logFile)
                ]);
            } else {
                Log::error('异步回调通知失败', [
                    'order_number' => $orderNumber,
                    'log_file' => basename($logFile),
                    'response' => substr($content, 0, 500) // 只记录前500字符
                ]);
            }
            
            // 删除日志文件
            unlink($logFile);
            
            exit(0);
        }
    }
    
    sleep(1);
    $waited++;
}

// 超时未找到日志文件
$app = new think\App();
$app->initialize();
Log::warning('异步回调监控超时', [
    'order_number' => $orderNumber,
    'log_file' => basename($logFile)
]);


